100 SYS700 110 ; "SCREENBOARD" 120 ; JOYSTICK-CONTROLLED ON-SCREEN 130 ; KEYBOARD 140 ; 150 ;ORIGINAL PROGRAM BY DAVID TOMBLIN 160 ; THIS VERSION JAN86 -CZ 170 ; 180 ; FROM 190 ; "[212]HE [212]RANSACTOR" 200 ; 210 ; 220 .OPT OO 230 *=$C000 240 ; 250 CHROUT =$FFD2 260 PLOT =$FFF0 270 SCREEN =$FB 280 JOYMASK =$FD 290 TEMP =$FE 300 TEMP2 =$FF 310 XADD =$8B 320 JOY =56320 330 ; 340 JMP START 350 ; 360 COLOUR .BYTE 14 ;SCREENBOARD COLOUR 370 SINDEX .BYTE 0 ;SCREEN INDEX 380 RVSCHAR .BYTE 0 390 MOVFLG .BYTE 0 400 KEYFLAGS =* 410 .BYTE 0 ;SHIFT OFF/ON/LOCK 420 .BYTE 0 ;CTRL OFF/ON/LOCK 430 .BYTE 0 ;COMMDR OFF/ON/LOCK 440 TOGCNT .BYTE 0 450 TOG2 .BYTE 0 460 FLAGIM .BYTE 0 470 STOPFLG .BYTE 0 480 OLKVEC .WORD 0 490 OLSTOP .WORD 0 500 ; 510 START =* 520 SEI 530 LDA #IRQRTN 560 STA $0315 570 ;SAVE KEYBOARD VECTOR 580 LDA $028F 590 STA OLKVEC 600 LDA $0290 610 STA OLKVEC+1 620 ;CHANGE THE STOP VECTOR 630 LDA $0328 640 STA OLSTOP 650 LDA $0329 660 STA OLSTOP+1 670 LDA #NEWSTOP 700 STA $0329 710 CLI 720 RTS 730 ; 740 ; 750 NEWKBD =* ;NEW KEYBOARD SETUP RTN 760 LDA FLAGIM ;SHIFT/C=/CTRL 770 STA 653 780 JMP (OLKVEC) 790 ; 800 ; 810 NEWSTOP =* 820 LDA STOPFLG 830 BEQ NOSTOP 840 STA $91 850 LDA #0 860 STA STOPFLG 870 NOSTOP =* 880 JMP (OLSTOP) 890 ; 900 ; 910 IRQRTN =* 920 JSR DRAWSCRN ;DRAW SCREENBOARD 930 SEC 940 JSR PLOT ;CHECK CURSOR POS 950 CPX #6 ;SEE IF IT'S IN SCRNBRD 960 BCS CRSOK ;NO IT ISN'T 970 ;YES IT IS, MOVE CURSOR DOWN 980 LDX #6 990 CLC 1000 JSR PLOT 1010 CRSOK =* 1020 JSR SCMOVE ;SCRNBD CURSOR MOVE 1030 JMP $EA31 1040 RTS 1050 ; 1060 ; 1070 SCMOVE =* ;MOVE SC CURSOR ROW, COL 1080 LDA JOY 1090 AND #31 1100 EOR #31 1110 STA JOYMASK 1120 BNE SCM0 ;STICK MOVED 1130 LDA #0 1140 STA MOVFLG 1150 JMP NOSTOR 1160 SCM0 =* 1170 LDA MOVFLG ;MOVED LAST TIME 1180 BNE NOSTOR 1190 LDA #1 1200 STA MOVFLG 1210 LDA #16 ;FIRE BUTTON BIT 1220 BIT JOYMASK 1230 BNE KEYPUSH ;ENTER KEY 1240 LDA JOYMASK 1250 AND #1 ;CHECK UP 1260 BEQ SCM1 ;NOT UP, CHECK DOWN 1270 LDX #-40 ;UP, SUBTRACT 40 1280 SCM1 =* 1290 LDA JOYMASK 1300 AND #2 ;CHECK DOWN 1310 BEQ SCM2 ;NOT DOWN, CHECK LEFT 1320 LDX #40 ;DOWN, ADD 40 1330 SCM2 =* 1340 LDA JOYMASK 1350 AND #4 ;CHECK LEFT 1360 BEQ SCM3 ;NOT LEFT, CHECK RIGHT 1370 LDA SINDEX 1380 CMP #120 1390 BCC SUB2 ;SUBTRACT 2 FOR TOP ROWS 1400 LDX #-4 ;SUBTRACT 4 FOR BOTTOM 2 1410 JMP SCM3 1420 SUB2 =* 1430 LDX #-2 ;LEFT, SUBTRACT 2 1440 SCM3 =* 1450 LDA JOYMASK 1460 AND #8 ;CHECK RIGHT 1470 BEQ SCM4 ;NOT RIGHT 1480 LDA SINDEX 1490 CMP #120 1500 BCC ADD2 1510 LDX #4 1520 JMP SCM4 1530 ADD2 =* 1540 LDX #2 1550 ; 1560 SCM4 =* 1570 STX XADD 1580 LDA SINDEX 1590 CLC 1600 ADC XADD 1610 BPL STORNEW ;KEEP SB CURSOR 1620 CMP #200 1630 BCS NOSTOR ;IN BOUNDS 1640 STORNEW =* 1650 STA SINDEX 1660 STA RVSCHAR 1670 CMP #120 1680 BCC NOSTOR 1690 AND #%11111100 1700 STA RVSCHAR ;LAST 2 ROWS IN 4S 1710 NOSTOR =* 1720 RTS 1730 ; 1740 ; 1750 KEYPUSH =* ;ENTER KEY 1760 LDA SINDEX 1770 CMP #120 ;"TOP 3 ROWS? 1780 BCS KPS1 ;NO 1790 LSR A ;YES, JUST DIVIDE BY 2 1800 JMP KPS2 1810 KPS1 [178][172] 1820 ;IN BOT[164]M 3 ROWS 1830 SEC 1840 SBC #120 1850 LSR A 1860 LSR A 1870 CLC 1880 ADC #K[195] 1890 KPS2 [178][172] 1900 ; 1910 TAX 1920 LDA KEYS,X ;[161] KEY FROM TABLE 1930 CMP #249 1940 BCS SPECIAL ;SPECIAL CHARACTER 1950 N[176]MC [178][172] ;N[176]MAL CHARACTER 1960 CPX #37 ;CHECK, ALPHANUMERICS 1970 BCS KBUF ;NO, USE KBD BUFFER 1980 ;YES, USE CUS[164]M KEYBOARD TRAP 1990 LDA KEYCODES,X ;[161] KEY CODE 2000 STA 203 ;LAST KEY 2010 JSR [162]KBD ;[153] THE CHARACTER 2020 JSR KILL[164]G ;KILL SHFT[173]CTRL[173]COMM 2030 RTS 2040 ; 2050 KBUF [178][172] 2060 LDY 198 ;# CHARS IN BUFFER 2070 CPY 649 ;MAX BUFFER SIZE 2080 BCS KBUF1 ;BUFFER FULL 2090 LDA KEYS,X ;[161] KEY FROM TABLE 2100 STA 631,Y ;PUT IN KBD BUFFER 2110 INC 198 ;INC[143]ENT BUF POINTER 2120 KBUF1 [178][172] 2130 JSR KILL[164]G 2140 RTS 2150 ; 2160 ; 2170 SPECIAL [178][172] ;H[175]LE SPECIAL CHARS 2180 CMP #249 ;[144] KEY 2190 BNE SPL1 2200 LDA #$7F 2210 STA [144]FLG 2220 RTS 2230 ; 2240 SPL1 [178][172] 2250 SEC 2260 SBC #250 ;MUST BE SH[139]T[173]CTRL[173]COMM 2270 LSR A 2280 TAX 2290 LDA #1 2300 ADC #0 2310 STA TEMP2 ;1 [139] C SET, 2 [139] [156] 2320 LDA KEYFLAGS,X 2330 E[176] TEMP2 ;SWITCH [145][173]OFF [176] 2340 [175] TEMP2 ; LOK[173]OFF [164]GGLE 2350 STA KEYFLAGS,X 2360 ; 2370 MAKIMAG [178][172] ;SET UP KEY IMAGE 2380 LDA #0 2390 STA FLAGIM 2400 LDX KEYFLAGS 2410 BEQ NK1 2420 [176]A #1 2430 NK1 [178][172] 2440 LDX KEYFLAGS[170]1 2450 BEQ NK2 2460 [176]A #4 2470 NK2 [178][172] 2480 LDX KEYFLAGS[170]2 2490 BEQ NK3 2500 [176]A #2 2510 NK3 [178][172] 2520 STA FLAGIM 2530 RTS 2540 ; 2550 ; 2560 KILL[164]G [178][172] ;KILL 1[171]TIME KEY FLAGS 2570 LDX #2 2580 KIL1 [178][172] 2590 LDA KEYFLAGS,X 2600 [175] #2 2610 STA KEYFLAGS,X 2620 DEX 2630 BPL KIL1 2640 JSR MAKIMAG 2650 RTS 2660 ; 2670 ; 2680 DRAWSCRN [178][172] ;DRAW SCREENBOARD 2690 LDA 648 ;SCREEN PAGE 2700 STA SCREEN[170]1 2710 LDA #0 2720 STA SCREEN 2730 STA [164]GCNT 2740 STA [164]G2 2750 LDX #0 2760 LDY #0 2770 DR1 [178][172] 2780 LDA #32 2790 STA (SCREEN),Y 2800 LDA KEYS,X 2810 [175] #63 2820 CPY RVSCHAR ;CHECK [129] REVERS CHR 2830 BNE N[176]VS 2840 [176]A #128 ;SET HIGH BIT [164] RVRS 2850 N[176]VS [178][172] 2860 INY 2870 STA (SCREEN),Y 2880 LDA COLOUR 2890 STA $D800,Y 2900 INY 2910 INX 2920 CPX #K[195] 2930 BCC DR1 2940 ; 2950 ; [153] BOT[164]M TWO KBD ROWS 2960 LDX #0 ;CHARACTER COUNTER 2970 DR2 [178][172] 2980 LDA XKEYS,X 2990 CMP #255 ;[164]GGLES 3000 BNE [168]OG 3010 JSR DRAW[164]G ;[153] OFF,[145],[176] LOK 3020 [168]OG [178][172] 3030 [175] #63 3040 STA TEMP 3050 LDA RVSCHAR ;CHECK HIGHLIGHT CHR 3060 CMP #120 3070 BCC N[176]VS2 ;N[145]E [164] HIGHLIGHT 3080 TYA 3090 CLC 3100 SBC RVSCHAR ;HIGHLIGHT 3110 CMP #3 ; THREE CHARACTERS 3120 BCS N[176]VS2 ; [139] OPTI[145] 3130 LDA TEMP ; IS SELECTED 3140 [176]A #128 3150 STA TEMP 3160 N[176]VS2 [178][172] 3170 LDA TEMP 3180 STA (SCREEN),Y 3190 LDA COLOUR 3200 STA $D800,Y 3210 INY 3220 INX 3230 CPX #XK[195] ;# OF CHARS 3240 BMI DR2 3250 ; 3260 ;UNDERLINE KEYBOARD 3270 LDX #40 ;[153] 40 CHARS 3280 DR3 [178][172] 3290 LDA #64 ;UNDERLINE CHAR 3300 STA (SCREEN),Y 3310 LDA COLOUR 3320 STA $D800,Y 3330 INY 3340 DEX 3350 BNE DR3 3360 RTS 3370 ; 3380 ; 3390 DRAW[164]G [178][172] 3400 ;[153] OFF, [145], [176] LOCK MESSAGE 3410 TXA 3420 PHA 3430 LDX [164]GCNT ;0[178]SHFT, 1[178]CTRL, 2[178]COM 3440 LDA KEYFLAGS,X ;OFF, [145], [176] LOK 3450 ASL A 3460 ASL A ;X4 [164] PO[181] [164] [164]GTEXT 3470 CLC 3480 ADC [164]G2 3490 TAX 3500 LDA [164]GTEXT,X 3510 STA TEMP 3520 INC [164]G2 3530 LDA [164]G2 3540 CMP #3 3550 BCC TGL 3560 INC [164]GCNT 3570 LDA #0 3580 STA [164]G2 3590 TGL [178][172] 3600 PLA 3610 TAX 3620 LDA TEMP 3630 RTS 3640 ; 3650 ; 3660 KEYS [178][172] 3670 .[198] "ABCDEFGHIJKLMNOPQRS " 3680 .[198] "TUVWXYZ0123456789[] " 3690 .BYTE 33,34 3700 .[198] "#$%&'(),.?:;<=>@^ " 3710 K[195] [178][172][171]KEYS 3720 CTRLCHRS [178][172] 3730 .BYTE 145,17,157,29,148,20,19,147,43,45 3740 .BYTE 13,249,250,251,252,253,254,255 3750 .[198] "*/" 3760 ; 3770 XKEYS [178][172] 3780 .[198] " CUP CDN CLF CRT INS DEL HOM CLR + - " 3790 .[198] " RTN STP SHF:(null)(null)(null) CTL:(null)(null)(null) COM:(null)(null)(null) * / " 3800 XK[195] [178][172][171]XKEYS 3810 ; 3820 [164]GTEXT .[198] "OFF ON LOK " 3830 ; 3840 X40 .BYTE 0,40,80,120,160 3850 ; 3860 KEYCODES [178][172] 3870 .BYTE 10,28,20,18,14,21,26,29,33,34 3880 .BYTE 37,42,36,39,38,41,62,17,13,60,22,30,31,9 3890 .BYTE 23,25,12,35,56,59,8,11,16,19,24,27,32